﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Globalization;
using BUS;

namespace TiDiSun
{
    public partial class frmChonMachSac : Form
    {
        public frmChonMachSac()
        {
            InitializeComponent();
        }

        #region "Thuộc tính"

        public static DataTable _dt; //Biến này lưu thông tin các acquy được dùng

        //Biến này lưu giá acquy phải trả
        public static int _tong_tien_mach_sac;


        #endregion 
    
        #region "Phương thức"

        //Phương thức tính cường độ dòng điện dựa trên công suất pin tạo ra.
        private double tinh_cuong_do_dong_dien() {
            return (double)this.Tag * 0.5 / 100;
        }

        //Phương thức này danh sách mạch sạc có cường độ dòng điện phù hợp
        private object lay_danh_sach_mach_sac() {
            return MachSacBUS.lay_danh_sach_mach_sac(tinh_cuong_do_dong_dien());
        }

        //Phương thức này khởi tạo các giá trị ban đầu.
        private void khoi_tao() {
            double temp = Convert.ToDouble(this.Tag.ToString());

            lbCongSuatPin.Text =  Math.Round(temp,2).ToString()+" W";
            lbCuongDoDongDien.Text = Math.Round(tinh_cuong_do_dong_dien(),2).ToString() + " A";
            lbCuongDoDDMachSac.Text = Math.Round(tinh_cuong_do_dong_dien(),2).ToString() +  " A";
            dtgvDanhSachMachSac.DataSource = lay_danh_sach_mach_sac();
            txtSoLuongMachSac.Enabled = false;
            btnThemMachSac.Enabled = false;
            btnXoaMachSacDaChon.Enabled = false;
            khoi_tao_cot();
        }

        //Phương thức khởi tạo cột của datagridview
        private void khoi_tao_cot()
        {
            _dt = new DataTable();
            _dt.Columns.Add("Mã mạch sạc", typeof(string));
            _dt.Columns.Add("Ampe", typeof(int));
            _dt.Columns.Add("Đơn giá", typeof(int));
            _dt.Columns.Add("Số lượng", typeof(int));
            _dt.Columns.Add("Thành tiền", typeof(int));

           dtgvDanhSachMachSacDaChon.AllowUserToAddRows = false;
            dtgvDanhSachMachSacDaChon.DataSource = _dt;

        }

        int tong_tien = 0;
        //Hàm này tính toán dữ tổng tiền acquy phải trả 
        private void tinh_tong_tien_mach_sac()
        {
            foreach (DataRow r in _dt.Rows)
            {
                tong_tien += int.Parse(r[4].ToString());
            }
            _tong_tien_mach_sac = tong_tien;
            txtTongTienMachSac.Text = tong_tien.ToString("###,###,##0.", CultureInfo.InvariantCulture).TrimStart().Replace(".", ",");
        }

        #endregion

        private void frmChonMachSac_Load(object sender, EventArgs e)
        {
            khoi_tao();
        }

        private void dtgvDanhSachMachSac_Click(object sender, EventArgs e)
        {
            txtSoLuongMachSac.Enabled = true;
            btnThemMachSac.Enabled = true;
        }

        private void btnThemMachSac_Click(object sender, EventArgs e)
        {
            try
            {
                int SoLuongAcQuyDuocChon = int.Parse(txtSoLuongMachSac.Text);

                if (SoLuongAcQuyDuocChon > 0)
                {
                    DataGridViewRow row = dtgvDanhSachMachSac.SelectedRows[0];
                    dtgvDanhSachMachSacDaChon.AllowUserToAddRows = true;
                    _dt.Rows.Add(row.Cells[0].Value.ToString(), row.Cells[3].Value.ToString(), row.Cells[4].Value.ToString(), txtSoLuongMachSac.Text, (int.Parse(row.Cells[4].Value.ToString()) * int.Parse(txtSoLuongMachSac.Text)).ToString());
                    dtgvDanhSachMachSacDaChon.DataSource = _dt;
                    tinh_tong_tien_mach_sac();
                }
                else
                {
                    MessageBox.Show("Số lượng phải lớn hơn 0");
                }
            }
            catch
            {
                MessageBox.Show("Không có dữ liệu");
            }
          
        }

        private void dtgvDanhSachMachSacDaChon_Click(object sender, EventArgs e)
        {
            btnXoaMachSacDaChon.Enabled = true;
        }

        private void btnXoaMachSacDaChon_Click(object sender, EventArgs e)
        {
            try
            {
                int index = dtgvDanhSachMachSacDaChon.SelectedRows[0].Index;
                _dt.Rows.RemoveAt(index);
                dtgvDanhSachMachSacDaChon.DataSource = _dt;
                tinh_tong_tien_mach_sac();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void dtgvDanhSachMachSacDaChon_DoubleClick(object sender, EventArgs e)
        {
            try
            {
                frmCapNhatSoLuongMachSac frm = new frmCapNhatSoLuongMachSac();
                int index = dtgvDanhSachMachSacDaChon.SelectedRows[0].Index;
                frm.Tag = _dt.Rows[index][3].ToString();
                frm.ShowDialog();

                if (frmCapNhatSoLuongMachSac._soLuong >= 1)
                {
                    _dt.Rows[index][3] = frmCapNhatSoLuongMachSac._soLuong.ToString();
                    _dt.Rows[index][4] = frmCapNhatSoLuongMachSac._soLuong * int.Parse(_dt.Rows[index][2].ToString());
                    dtgvDanhSachMachSacDaChon.DataSource = _dt;
                    tinh_tong_tien_mach_sac();
                }
            }
            catch
            {
                MessageBox.Show("Chưa có dữ liệu");
            }
        
        }

        private void txtTongTienMachSac_TextChanged(object sender, EventArgs e)
        {

        }

        private void btnSAVE_Click(object sender, EventArgs e)
        {
            if (_dt.Rows.Count > 0)
            {
                HoaDonHelper.dt = _dt;
                HoaDonHelper.tongtien = tong_tien;
                this.Close();
            }
        }

        private void btnCANCEL_Click(object sender, EventArgs e)
        {
            this.Close();
        }

    }
}
